Stata16调用Python测试(一)
本文作者:张 邯
文字编辑:宁刘莹
技术总编:张 邯
爬虫俱乐部将于2019年8月22日至28日在湖北武汉举行为期一周的Stata编程技术定制培训,此次培训采用Stata16进行讲解,采取初级班和高级班分批次培训。课程通过案例教学模式,旨在帮助大家在短期内掌握Stata软件编程、金融计量知识和实证分析方法,使大家熟悉Stata核心的爬虫技术,以及Stata与其他软件交互的高端技术。目前正在火热招生中~
详细培训大纲及报名方式,请点击文末阅读原文呦~
众所周知,爬虫俱乐部的主要研究领域在Stata和Python,两个工具相辅相成,帮助我们完成从数据获取、数据处理到实证、结果输出一系列操作,虽然Python中已有可以读入Stata数据的库,我们也可以通过csv文件实现将Python获得、处理好的数据放到Stata中跑回归等,但还是有些麻烦让人头疼。Stata16中加入了Python的接口,让用户可以自由调用Python的解释器,并且通过内置在Stata16中的第三方Python库Stata Function Interface(sfi)实现将Stata中的数据(包括数据集中的数据、宏、标签值、矩阵、标量等)传入Python中的变量存储好,然后进行相应的处理。本文将简单介绍Stata16中的基本命令,然后通过一个简单的例子展示一下它的应用:调用之前我们已经介绍过的数据可视化第三方库——pyecharts(Python数据可视化神器:pyecharts (一);Python数据可视化神器:pyecharts (二))来绘制auto.dta数据集中make和price数据的直方图。
一、基础命令
1、进入环境—— python与python:的区别
首先,输入python进入Python环境,如下:
可以看到,界面上提示进入Python环境,并且提示符变成Python的shell提示符“>>>”,这时候我们就可以输入Python命令了,我们做一个最简单的测试,输入以下程序:
>>> sum = 0
>>> for i in range(1,101):
... sum += i
...
>>> print(sum)
5050
此处计算1到100的和,用到for循环,有几点需要提示的地方:
(1)Stata中的Python程序依然需要遵守Python的代码规则,而最重要的就是缩进原则,理论上来说Python的缩进是一个Tab键,但是Stata的命令窗口不支持Tab键,可以使用四个空格代替。
(2)在交互式的Python环境中进入循环后,循环体的代码输入完之后需要回车表示退出循环,然后再不缩进的输入外层的命令,不然会报非法语法的错误。
最后使用end退出Python环境即可,可以参见下图:
python:是Stata16设置的另一种进入Python环境的方式,它们的区别在于使用python进入Python环境则完全进入Python环境,直到end才会回到Stata,但是使用Python:时并没有完全脱离Stata,例如在报错时,前者打印报错后,依然留在Python环境等待下一条Python命令,但是后者报错时会返回Stata:
2、单句调用—— python:
单句调用Python语句不需要进入Python环境,只调用Python解释器运行,运行后回到Stata中,如下图所示:
3、查看Python环境中的对象 —— python describe
进入Python环境后所产生的对象,并不会随着退出Python环境消失,而是一直保存到完全退出Stata,我们可以在Stata中输入python describe 来查看内存中有哪些对象,比如我们引入sys包,然后查看一下:
可以看到,我们刚才运行的程序产生的sum和i也还在内存中,另外我们新引入的模块sys也在内存中“待命”了。
4、删除Python环境中的对象 —— python drop与 python clear
在内存中的对象如果想删除,可以使用python drop命令,加上想删除的对象名称即可,我们以删除sum举例,再查看内存中的对象,发现sum已经没有了:
如果想一次性删除所有的,可以直接使用python clear,这时再查看对象,已经没有可以输出的东西了~
5、查看可使用的模块—— python which modulename
今天最后一个想给大家介绍的基础命令是查看某个模块是否可用的,它会返回模块所在位置:
二、调用第三方库pyecharts
熟悉了Stata16中Python的基本操作,我们来做一些有实际应用意义的事情:使用数据集中的数据调用Python库画图。我们仅以直方图为例,展示Stata数据和Python的交互方法,有兴趣的小伙伴可以试着画更多的图形~
use auto.dta
python clear
python:
from sfi import Data
from pyecharts.charts import Bar
x = Data.get("make")
y = Data.get("price")
Bar().add_xaxis(x).add_yaxis("price",y).render("e:\\auto_price.html")
end
shellout e:\\auto_price.html
这里sfi是内置在Stata16中的模块,用于进行数据传递,Stata中的各种数据都可以引用相应的包转换成Python内置类型,如列表等,这里我们使用Data模块,并使用get()方法将auto数据集中的make和price两个变量的数据传递到Python环境中,并赋给x和y两个变量,此处x和y分别装着30个数据,将这些数据运用之前我们讲过的方法制作成直方图,然后退出Python环境,使用shellout打开文件,就可以得到如下结果:
sfi库可以说是Stata16中与Python交互的一个核心枢纽,在接下来的推文当中,我们会详细介绍这个第三方库以及一些应用实例,帮大家熟悉在Stata中调用Python的新功能。
对爬虫俱乐部的推文累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫!
往期推文推荐
关于我们
微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。
此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。
投稿邮箱:statatraining@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。